/*
 * CeldaImagen.cpp
 *      Author: sebastian
 */

#include "CeldaImagen.h"

CeldaImagen::CeldaImagen(DialogoProbabilidades* dialogo1){
	puedeSerAgujero = true;
	esAgujero = false;
	this->dialogo1 = dialogo1;
	estaOK = false;
	imagen = 0;
	boton = new Gtk::Button();
	boton->show();
	boton->signal_clicked().connect(sigc::mem_fun(*this, &CeldaImagen::on_clicked));
	show = false;
	imagen = new Gtk::Image("estado.gif");
	boton->add(*imagen);
	imagen->show();
	iniciarProbabilidades();
}

CeldaImagen::~CeldaImagen() {
	if (probabilidades != 0) {
		delete probabilidades;
	}
	if (boton!=0) {
		if (imagen != 0){
			imagen->hide();
			delete imagen;
		}
		boton->hide();
		delete boton;
	}
}

Gtk::Button* CeldaImagen::getBoton(){
	return boton;
}

void CeldaImagen::on_clicked(){
	setearMisDatos();
	bool resultado = dialogo1->show();
	if (resultado) {
		obtenerDatosDeProbabilidades();
		cambiarEstado();
	}
}



void CeldaImagen::iniciarProbabilidades(){
	probabilidades = new std::map<int,int>;
	(*probabilidades)[spinAmarillo] = 0;
	(*probabilidades)[spinAzul] = 0;
	(*probabilidades)[spinRojo] = 0;
	(*probabilidades)[spinVerde] = 0;
	(*probabilidades)[spinVioleta] = 0;
	(*probabilidades)[spinMBVAmarilla] = 0;
	(*probabilidades)[spinMBVAzul] = 0;
	(*probabilidades)[spinMBVRoja] = 0;
	(*probabilidades)[spinMBVVerde] = 0;
	(*probabilidades)[spinMBVVioleta] = 0;
	(*probabilidades)[spinMBHAmarilla] = 0;
	(*probabilidades)[spinMBHAzul] = 0;
	(*probabilidades)[spinMBHRoja] = 0;
	(*probabilidades)[spinMBHVerde] = 0;
	(*probabilidades)[spinMBHVioleta] = 0;
	(*probabilidades)[spinEstrella] = 0;

}

void CeldaImagen::setearMisDatos(){
	if (puedeSerAgujero) {
		dialogo1->verCheckAgujero(true);
	} else {
		dialogo1->verCheckAgujero(false);
	}
	dialogo1->setearValores(*probabilidades,esAgujero);
}

void CeldaImagen::obtenerDatosDeProbabilidades(){
	std::map<int,Gtk::SpinButton*> map = dialogo1->getSpinProbabilidades();
	std::map<int,Gtk::SpinButton*>::iterator it = map.begin();
	for (unsigned int i = 0 ; i < CANTIDAD_DE_SPINS ; i++){
	 	(*probabilidades)[i] = it->second->get_value_as_int();
		it++;
		}
	esAgujero = dialogo1->getClickAguj();

}

void CeldaImagen::cambiarEstado(){
	estaOK = true;
	if (imagen != 0) {
		imagen->set("estadoOK.gif");
	}
}

Json::Value CeldaImagen::getJson(){
	Json::Value root;
	root["esAgujero"] = esAgujero;
	if (!esAgujero){
		root["probabilidad"]["ButtonAmarillo"] = (*probabilidades)[spinAmarillo];
		root["probabilidad"]["ButtonAzul"] = (*probabilidades)[spinAzul];
		root["probabilidad"]["ButtonRojo"] = (*probabilidades)[spinRojo];
		root["probabilidad"]["ButtonVerde"] = (*probabilidades)[spinVerde];
		root["probabilidad"]["ButtonVioleta"] = (*probabilidades)[spinVioleta];
		root["probabilidad"]["MBVAmarilla"] = (*probabilidades)[spinMBVAmarilla];
		root["probabilidad"]["MBVAzul"] = (*probabilidades)[spinMBVAzul];
		root["probabilidad"]["MBVRoja"] = (*probabilidades)[spinMBVRoja];
		root["probabilidad"]["MBVVerde"] = (*probabilidades)[spinMBVVerde];
		root["probabilidad"]["MBVVioleta"] = (*probabilidades)[spinMBVVioleta];
		root["probabilidad"]["MBHAmarilla"] = (*probabilidades)[spinMBHAmarilla];
		root["probabilidad"]["MBHAzul"] = (*probabilidades)[spinMBHAzul];
		root["probabilidad"]["MBHRoja"] = (*probabilidades)[spinMBHRoja];
		root["probabilidad"]["MBHVerde"] = (*probabilidades)[spinMBHVerde];
		root["probabilidad"]["MBHVioleta"] = (*probabilidades)[spinMBHVioleta];
		root["probabilidad"]["Estrella"] = (*probabilidades)[spinEstrella];
	}
	return root;
}

void CeldaImagen::setJson(Json::Value& root){
	iniciarProbabilidades();
	esAgujero = root["esAgujero"].asBool();
	if (!esAgujero){
		(*probabilidades)[spinAmarillo] = root["probabilidad"]["ButtonAmarillo"].asInt();
		(*probabilidades)[spinAmarillo] = root["probabilidad"]["ButtonAmarillo"].asInt();
		(*probabilidades)[spinAzul] = root["probabilidad"]["ButtonAzul"].asInt();
		(*probabilidades)[spinRojo] =  root["probabilidad"]["ButtonRojo"].asInt();
		(*probabilidades)[spinVerde] = root["probabilidad"]["ButtonVerde"].asInt();
		(*probabilidades)[spinVioleta] = root["probabilidad"]["ButtonVioleta"].asInt();
		(*probabilidades)[spinMBVAmarilla] = root["probabilidad"]["MBVAmarilla"].asInt();
		(*probabilidades)[spinMBVAzul] = root["probabilidad"]["MBVAzul"].asInt();
		(*probabilidades)[spinMBVRoja] = root["probabilidad"]["MBVRoja"].asInt();
		(*probabilidades)[spinMBVVerde] = root["probabilidad"]["MBVVerde"].asInt();
		(*probabilidades)[spinMBVVioleta] = root["probabilidad"]["MBVVioleta"].asInt();
		(*probabilidades)[spinMBHAmarilla] = root["probabilidad"]["MBHAmarilla"].asInt();
		(*probabilidades)[spinMBHAzul] = root["probabilidad"]["MBHAzul"].asInt();
		(*probabilidades)[spinMBHRoja] = root["probabilidad"]["MBHRoja"].asInt();
		(*probabilidades)[spinMBHVerde] = root["probabilidad"]["MBHVerde"].asInt();
		(*probabilidades)[spinMBHVioleta] = root["probabilidad"]["MBHVioleta"].asInt();
		(*probabilidades)[spinEstrella] = root["probabilidad"]["Estrella"].asInt();
	}
	cambiarEstado();
}

bool CeldaImagen::getEstado(){
	return estaOK;
}

bool CeldaImagen::celdaEsAgujero(){
	return esAgujero;
}

void CeldaImagen::noPuedeSerAgujero(){
	puedeSerAgujero = false;
}
